home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / CONCAT.XPL < prev    next >
Text File  |  2001-09-30  |  3KB  |  124 lines

  1. \CONCAT.XPL    JUN-23-88    VER 1.3
  2. \THIS PROGRAM CONCATENATES TEXT FILES.  IT ILLUSTRATES THE USE
  3. \ OF SCAN AND OPENF TO OPEN AN INPUT FILE BY NAME FROM XPL.
  4.  
  5. \WARNING: FSCAN USES 1K OF THE SYSTEM OUTPUT BUFFER AT $74800.
  6.  
  7. \REVISION HISTORY:
  8. \MAR-14-84, ORIGINAL
  9. \JUN-23-88, MODIFIED FOR 68000 APEX
  10.  
  11. code        RESERVE=3    CHIN=7        CHOUT=8
  12. CRLF=9        INTOUT=11    TEXT=12        OPENI=13
  13. OPENO=14    CLOSE=15    TRAP=17        GETERR=22
  14. SCAN=24        OPENF=29;
  15.  
  16. define INTSIZE=4;    \NUMBER OF BYTES IN AN INTEGER
  17. define CR=$0D, EOF=$1A, SP=$20;
  18. integer UNIT, INFO, I, CHAR;
  19.  
  20.  
  21.  
  22. procedure FILMOV;    \MOVE THE IN FILE TO THE OUT FILE
  23. integer CH;
  24. loop begin
  25. CH:= CHIN(3);
  26. if CH = EOF then quit;
  27. CHOUT(3,CH);
  28. end;    \FILMOV
  29.  
  30.  
  31.  
  32. function GETCH;
  33. integer CH;
  34. begin
  35. CH:= CHIN(0);
  36. if CH>=^a & CH<=^z then CH:= CH &$DF;    \FORCE TO UPPERCASE
  37. return CH;
  38. end;    \GETCH
  39.  
  40.  
  41.  
  42. function INFILE;    \GET THE INPUT FILE
  43. integer I, CHAR, INFO, UNIT;
  44. address LINE;
  45. begin
  46. LINE:= RESERVE(12);    \(EXTRA SPACE IS FOR OVERSHOOT)
  47. TEXT(0, "INPUT FILE? ");
  48. OPENI(0);
  49. CHAR:= GETCH;
  50. if CHAR=CR then
  51.     begin
  52.     CLOSE(3);
  53.     CRLF(0);   TEXT(0, "ALL DONE...");
  54.     exit
  55.     end;
  56. if CHAR<^0 ! CHAR>^9 then        \UNIT NO. MISSING
  57.     begin
  58.     TEXT(0, "ERROR--NEED UNIT NUMBER");   CRLF(0);
  59.     return false;
  60.     end;
  61. UNIT:= CHAR-^0;
  62. CHAR:= GETCH;        \SKIP THE COLON
  63. I:= 0;
  64. repeat
  65.     CHAR:= GETCH;
  66.     LINE(I):= CHAR;
  67.     I:= I+1;
  68. until CHAR=^. ! CHAR=CR ! I>8;    \(TRICKY)
  69. for I:= I-1, 7 do LINE(I):= SP;
  70. while CHAR#^. & CHAR#CR do CHAR:= GETCH;
  71. if CHAR=^. then
  72.     begin
  73.     repeat
  74.         CHAR:= GETCH;
  75.         LINE(I):= CHAR;        \(OVERSHOOTS ONE CHAR)
  76.         I:= I+1;
  77.     until CHAR=CR ! I>11;
  78.     for I:= I-1, 11 do LINE(I):= SP;
  79.     end
  80. else            \EXTENSION IS MISSING
  81.     begin
  82.     TEXT(0, "ERROR--NEED FULL FILE NAME");   CRLF(0);
  83.     return false;
  84.     end;
  85. CRLF(0);        \ECHO FULL FILE NAME
  86. INTOUT(0, UNIT);
  87. CHOUT(0, ^:);
  88. for I:= 0, 7 do CHOUT(0, LINE(I));
  89. CHOUT(0, ^.);
  90. for I:= 8, 10 do CHOUT(0, LINE(I));
  91. CHOUT(0, ^=);
  92. INFO:= RESERVE(2*INTSIZE);
  93. TRAP(false);
  94. SCAN(UNIT, INFO, LINE);
  95. if GETERR then
  96.     begin
  97.     CRLF(0);   TEXT(0, "ERROR--NO SUCH FILE");   CRLF(0);
  98.     TRAP(true);
  99.     return false;
  100.     end;
  101. TRAP(true);
  102. INTOUT(0, INFO(0));   TEXT(0, ", ");   INTOUT(0, INFO(1));   CRLF(0);
  103. OPENF(UNIT, INFO);
  104. return true;
  105. end;    \INFILE
  106.  
  107.  
  108.  
  109. begin    \MAIN
  110. TEXT(0, "-- CONCATENATE, V1.3 --
  111. ");
  112. OPENO(3);
  113. loop    begin
  114.     repeat until INFILE;    \KEEP TRYING UNTIL IT'S RIGHT
  115.     FILMOV;            \MOVE THE FILE
  116.     end;
  117. end;    \MAIN
  118. ");
  119. OPENO(3);
  120. loop    begin
  121.     repeat until INFILE;    \KEEP TRYING UNTIL IT'S RIGHT
  122.     FILMOV;            \MOVE THE FILE
  123.     end;
  124. end;    \MAIN